SLF4J লগিং ব্যবহার করে Unit Testing করার সময় নিশ্চিত করতে হয় যে লগ মেসেজগুলো সঠিকভাবে তৈরি হচ্ছে এবং কাঙ্খিত লেভেলে (INFO, DEBUG, WARN, ERROR) আউটপুট হচ্ছে। Unit Testing-এ লগ আউটপুট যাচাই করা ডিবাগিং এবং লগিং লজিকের সঠিকতা যাচাই করার জন্য গুরুত্বপূর্ণ।
SLF4J Logging টেস্ট করার পদ্ধতি
SLF4J লগিং যাচাই করার জন্য Mockito বা LogCaptor লাইব্রেরি ব্যবহার করা হয়। LogCaptor একটি জনপ্রিয় টুল, যা সহজেই SLF4J লগিং যাচাই করতে দেয়।
উদাহরণ: LogCaptor ব্যবহার করে SLF4J Logging টেস্ট করা
Step 1: Maven ডিপেনডেন্সি যোগ করা
SLF4J এবং LogCaptor ডিপেনডেন্সি:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.36</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.11</version>
</dependency>
<dependency>
<groupId>nl.altindag</groupId>
<artifactId>log-captor</artifactId>
<version>2.7.5</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.8.2</version>
</dependency>
Step 2: লগিং যুক্ত করা
ExampleLogger.java
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ExampleLogger {
private static final Logger logger = LoggerFactory.getLogger(ExampleLogger.class);
public void logInfoMessage(String message) {
logger.info("INFO: {}", message);
}
public void logErrorMessage(String error) {
logger.error("ERROR: {}", error);
}
}
Step 3: Unit Test তৈরি করা
ExampleLoggerTest.java
import nl.altindag.log.LogCaptor;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class ExampleLoggerTest {
@Test
void testInfoLog() {
// LogCaptor ব্যবহার করে SLF4J লগ ক্যাপচার করা
LogCaptor logCaptor = LogCaptor.forClass(ExampleLogger.class);
ExampleLogger logger = new ExampleLogger();
logger.logInfoMessage("This is an info message.");
// টেস্ট করা যে INFO লেভেলে লগ হয়েছে কি না
assertEquals(1, logCaptor.getInfoLogs().size());
assertTrue(logCaptor.getInfoLogs().get(0).contains("INFO: This is an info message."));
}
@Test
void testErrorLog() {
// LogCaptor ব্যবহার করে SLF4J লগ ক্যাপচার করা
LogCaptor logCaptor = LogCaptor.forClass(ExampleLogger.class);
ExampleLogger logger = new ExampleLogger();
logger.logErrorMessage("This is an error message.");
// টেস্ট করা যে ERROR লেভেলে লগ হয়েছে কি না
assertEquals(1, logCaptor.getErrorLogs().size());
assertTrue(logCaptor.getErrorLogs().get(0).contains("ERROR: This is an error message."));
}
}
ব্যাখ্যা
- LogCaptor:
- এটি SLF4J লগ মেসেজগুলো সহজেই ক্যাপচার এবং যাচাই করার জন্য ব্যবহার করা হয়।
LogCaptor.forClass(ClassName.class)নির্দিষ্ট ক্লাসের লগ ক্যাপচার করতে ব্যবহৃত হয়।
- Assertion:
assertEqualsব্যবহার করে নিশ্চিত করা হয় যে সঠিক সংখ্যক লগ মেসেজ তৈরি হয়েছে।assertTrueব্যবহার করে যাচাই করা হয় যে লগ মেসেজ কাঙ্খিত টেক্সট ধারণ করছে কি না।
- লগিং লেভেল যাচাই:
logCaptor.getInfoLogs()এবংlogCaptor.getErrorLogs()-এর মাধ্যমে INFO এবং ERROR লেভেলের লগ যাচাই করা হয়।
Step 4: টেস্ট রান করা
টেস্ট চালানোর পরে আউটপুট:
INFO: This is an info message.
ERROR: This is an error message.
JUnit রিপোর্ট:
✔ testInfoLog PASSED
✔ testErrorLog PASSED
Mockito ব্যবহার করে SLF4J টেস্ট করার বিকল্প পদ্ধতি
LogCaptor না ব্যবহার করে Mockito দিয়ে SLF4J টেস্ট করা সম্ভব। তবে এটি একটু বেশি কনফিগারেশন প্রয়োজন:
ExampleLoggerTest.java (Mockito পদ্ধতি)
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.slf4j.Logger;
import static org.mockito.Mockito.*;
public class ExampleLoggerTest {
@Test
void testInfoLogWithMockito() {
Logger mockLogger = mock(Logger.class);
ExampleLogger exampleLogger = new ExampleLogger();
exampleLogger.logInfoMessage("Testing with Mockito.");
verify(mockLogger, times(1)).info("INFO: {}", "Testing with Mockito.");
}
}
উপসংহার
SLF4J লগিং যাচাই করার জন্য LogCaptor একটি সহজ এবং কার্যকর টুল। এটি লগিং লেভেল এবং মেসেজ যাচাই করতে ডেভেলপারদের সাহায্য করে। Mockito একটি বিকল্প পদ্ধতি হিসেবে ব্যবহার করা যেতে পারে, তবে এটি কিছুটা জটিল। Unit Testing-এর মাধ্যমে লগিং সঠিকভাবে কাজ করছে কি না তা যাচাই করলে অ্যাপ্লিকেশন ডিবাগিং এবং রক্ষণাবেক্ষণ সহজ হয়।
Read more